/**
  * @file mainwindow.h
  * @brief Plik definiujący klasę reprezentującą główne okno programu. Są tu podstawowe przyciski obsługi programu oraz widget wyświetlający animację fali.
  */
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "settings/settingsdialog.h"
#include "graphics/scene.h"
#include <QClipboard>

namespace Ui
{
        class MainWindow;
}
/**
  * @class SettingsDialog
  * @brief Definicja klasy reprezentującej główne okno programu.
  */
class MainWindow : public QMainWindow
{
	Q_OBJECT
	public:
		/**
		  * @param parent wskaźnik na rodzica
		  * @brief Konstruktor okna programu.
		  */
		explicit MainWindow(QWidget *parent = 0);
		/**
		  * @brief Destruktor obiektu
		  */
		~MainWindow();

	signals:
		/**
		  * @brief sygnał wysyłany przy kliknięciu przycisku "start". Powoduje on rozpoczęcie lub kontynuację cyklicznego generowania punktów.
		  */
		void onStart();
		/**
		  * @brief sygnał wysyłany przy kliknięciu przycisku "stop". Powoduje on zatrzymanie cyklicznego generowania punktów.
		  */
		void onStop();
		/**
		  * @brief DEPRECATED
		  * sygnał wysyłany w celu przerysowania sceny. Nieużywany.
		  */
		void onSceneRepaint();

	private slots:
		/**
		  * @brief slot obsługujący wybranie opcji w menu. Zamyka program.
		  * @see MainWindow::sActionExitTriggered
		  */
		void sActionExitTriggered();
		/**
		  * @brief slot obsługujący wybranie opcji w menu. Zatrzymuje generowanie fali i zapisuje klatkę do schowka.
		  * @see MainWindow::sActionSaveClipboardTriggered
		  */
		void sActionSaveClipboardTriggered();
		/**
		  * @brief slot obsługujący wybranie opcji w menu. Zatrzymuje generowanie fali i zapisuje klatkę do pliku.
		  * @see MainWindow::sActionSaveFrameTriggered
		  */
		void sActionSaveFrameTriggered();
		/**
		  * @brief slot obsługujący wybranie opcji w menu. Otwiera okno konfiguracji parametrów fali.
		  * @see MainWindow::sActionSettingsTriggered
		  */
		void sActionSettingsTriggered();
		/**
		  * @brief slot obsługujący kliknięcie przycisku "start".
		  * @see MainWindow::sButtonStartClicked
		  */
		void sButtonStartClicked();
		/**
		  * @brief slot obsługujący kliknięcie przycisku "stop".
		  * @see MainWindow::sButtonStopClicked
		  */
		void sButtonStopClicked();
		/**
		  * @brief slot obsługujący kliknięcie przycisku "<". Przesuwa animację o 5 klatek w tył.
		  * @see MainWindow::sButtonPreviousClicked
		  */
		void sButtonPreviousClicked();
		/**
		  * @brief slot obsługujący kliknięcie przycisku ">". Przesuwa animację o 5 klatek w przód.
		  * @see MainWindow::sButtonNextClicked
		  */
		void sButtonNextClicked();
		/**
		  * @brief slot obsługujący obrót statycznej animacji fali.
		  * @see MainWindow::sChangeDegree
		  */
		void sChangeDegree(int value);

	private:
		Ui::MainWindow *ui;
		SettingsDialog *settings;
		QClipboard *clipboard;
};

#endif // MAINWINDOW_H
